In conventional networking operations, random memory locations are allocated within a host device for use as temporary storage for incoming data received from a network. Traditionally, when a host device receives data through a network communication, first, the data is placed at random locations within the host memory. Subsequently, the data is copied from the random memory locations to the appropriate locations within the host memory. Furthermore, typically, the incoming data is generally handled at a low level within a networking architecture. Conversely, allocating the appropriate memory locations defined to be the final destination for the incoming data is handled at a high level within the networking architecture.
Accordingly, in typical networking operations, the incoming network data should be copied at least once from the random memory locations before the incoming network data can be placed in the appropriate locations in the host memory. Unfortunately, however, the latter copying operations can consume valuable host processor cycles, which could otherwise be used for more productive functions.
Additionally, in the conventional networking operations, synchronous socket interfaces are implemented. That is, the application can post only a single read buffer per reader thread at any given time. Furthermore, the reader thread is blocked until the corresponding network data arrives from the network. The implementing of synchronous socket interfaces, however, negatively affects network performance and further lowering throughput.